home *** CD-ROM | disk | FTP | other *** search
Java Source | 2000-09-08 | 3.0 KB | 117 lines |
- package applets;
-
- import shout3d.*;
- import shout3d.core.*;
- import custom_nodes.*;
-
-
- public class TargetViewpointTestPanel extends Shout3DPanel implements DeviceObserver {
-
-
- int pixelStartX;
- int pixelStartY;
-
- float headingSpeed = 0.0f;
- float pitchSpeed = 0.0f;
- float distanceSpeed = 0.0f;
-
- TargetViewpoint cam;
-
-
- public TargetViewpointTestPanel(Shout3DApplet applet){
- super(applet);
- }
-
- public void customInitialize() {
-
- addDeviceObserver(this,"MouseInput", null);
- getRenderer().addRenderObserver(this, null);
- cam = (TargetViewpoint) getCurrentBindableNode("Viewpoint");
-
- }
-
-
- protected void finalize() {
- removeDeviceObserver(this,"MouseInput");
- getRenderer().removeRenderObserver(this);
- }
-
-
-
- public boolean onDeviceInput(DeviceInput di, Object userData) {
- MouseInput mi = (MouseInput) di;
- switch (mi.which){
-
- case MouseInput.DOWN:
- pixelStartX = mi.x;
- pixelStartY = mi.y;
- return true;
-
- case MouseInput.UP:
- headingSpeed = 0.0f;
- pitchSpeed = 0.0f;
- distanceSpeed = 0.0f;
- return true;
-
- case MouseInput.DRAG:
-
- //if left button used
- if(mi.button == 0) {
-
- int pixelEndX = mi.x;
- int pixelEndY = mi.y;
-
- int dragDistanceX = pixelEndX - pixelStartX;
- int dragDistanceY = pixelEndY - pixelStartY;
-
- //convert drag to rotation speeds
- //at 1/70 radians/sec for each pixel dragged.
- //i.e., dragging 70 pixels creates
- //speed of 1 radian per second
- headingSpeed = dragDistanceX/70f;
- pitchSpeed = dragDistanceY/70f;
-
-
- return true;
-
- }//end of 0 if
-
- //if right button used
- if(mi.button == 1) {
-
- int pixelEndY = mi.y;
- int dragDistanceY = pixelEndY - pixelStartY;
-
- //convert drag to zoom speed
- //at 1/150 meters/sec for each pixel dragged
- //i.e., dragging 150 pixels creates
- //speed of 1 meter per second
- distanceSpeed = dragDistanceY/150f;
-
- return true;
-
- }//end of 1 if
-
- }//end of switch
-
- return false;
-
- }
-
- public void onPreRender (Renderer r, Object o) {
-
- float headingDelta = headingSpeed/getFramesPerSecond();
- float temp = cam.heading.getValue() - headingDelta;
- cam.heading.setValue(temp);
-
- float pitchDelta = pitchSpeed/getFramesPerSecond();
- temp = cam.pitch.getValue() - pitchDelta;
- cam.pitch.setValue(temp);
-
- float distanceDelta = distanceSpeed/getFramesPerSecond();
- temp = cam.distance.getValue() + distanceDelta;
- cam.distance.setValue(temp);
-
- }
-
- }//end of class